/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package calculadorfpa.util;

import calculadorfpa.exception.MyFPAException;
import calculadorfpa.modelo.ArquivoInterfaceExterna;
import calculadorfpa.modelo.ArquivoLogicoInterno;
import calculadorfpa.modelo.ConsultaExterna;
import calculadorfpa.modelo.EntradaExterna;
import calculadorfpa.modelo.Funcao;
import calculadorfpa.modelo.Projeto;
import calculadorfpa.modelo.ProjetoCAEstimativa;
import calculadorfpa.modelo.ProjetoCAIndicativa;
import calculadorfpa.modelo.ProjetoMelhoria;
import calculadorfpa.modelo.SaidaExterna;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author TECBMBKD
 */
public class MyFPAUtil {

    public static void adicionaFuncao(Funcao funcao, List<Funcao> listaFuncao) throws MyFPAException {
        if (listaFuncao.contains(funcao)) {
            throw new MyFPAException("Nome inválido: já há uma função do mesmo tipo cadastrada com este nome");
        } else {
            listaFuncao.add(funcao);
        }
    }

    public static String getDescricaoTipoProjeto(Class classe) {
        if (classe == Projeto.class) {
            return "Projeto";
        } else if (classe == ProjetoMelhoria.class) {
            return "Projeto de Melhoria";
        } else if (classe == ProjetoCAEstimativa.class || classe == ProjetoCAIndicativa.class) {
            return "Contagem antecipada";
        }
        return "";
    }
    
    public static List<Funcao> filtraLista(List<Funcao> lista, Class tipoFuncao) {
        LinkedList<Funcao> retorno = new LinkedList<Funcao>();
        for(Funcao f: lista) {
            if(f.getClass().equals(tipoFuncao)) {
                retorno.add(f);
            }
        }
        
        return retorno;
    }

    public static <T extends Funcao> int getCodigoByTipoFuncao(Class<T> classe) {
        if(classe == ArquivoInterfaceExterna.class) {
            return 1;
        } else if(classe == ArquivoLogicoInterno.class) {
            return 2;
        }else if(classe == SaidaExterna.class) {
            return 3;
        }else if(classe == ConsultaExterna.class) {
            return 4;
        }else if(classe == EntradaExterna.class) {
            return 5;
        }
        return -1;
    }
}
